package main

import (
	"fmt"
	"time"
)

func main() {
	println("start main")
	ch := make(chan int)
	go func(ch chan int) {
		for i := 0; i < 10; i++ {
			ch <- i
			time.Sleep(200 * time.Millisecond)
		}
		close(ch) // 如果不关闭channel,会引发panic
	}(ch)

	for {
		if value, open := <-ch; open {
			fmt.Println(value)
		} else {
			fmt.Println(value)
			break //表示channel已经被关闭，退出循环
		}
	}
	println("end main")
}

// 如果不close掉channel，则会报错："all goroutines are asleep - deadlock"
// 是因为在遍历channel时，取完10个数后会阻塞，希望有一个线程关闭这个channel来解除阻塞，
// 但所有线程执行完后都没有关闭的动作，因此引发死锁
// 再举个例子，channel22.go
